home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / powervww / pvtxt.cpp < prev    next >
C/C++ Source or Header  |  1998-01-05  |  6KB  |  293 lines

  1. //  ____________________________________________________
  2. // |                                                    |
  3. // |  Project:     POWER VIEW INTERFACE                 |
  4. // |  File:        PVTXT.CPP                            |
  5. // |  Compiler:    WPP386 (10.6)                        |
  6. // |                                                    |
  7. // |  Subject:     Static & dynamic text support        |
  8. // |                                                    |
  9. // |  Author:      Emil Dotchevski                      |
  10. // |____________________________________________________|
  11. //
  12. // E-mail: zajo@geocities.com
  13. // URL:    http://www.geocities.com/SiliconValley/Bay/3577
  14.  
  15. #define uses_stdio
  16. #define uses_string
  17. #define uses_dc
  18. #define uses_dialog
  19. #define uses_system
  20. #define uses_txt
  21.  
  22. #include "PVuses.h"
  23.  
  24. //Tdtext publics:
  25.  
  26. Tdtext::Tdtext( int _xl, int _yl ):
  27.   Titem( _xl, _yl )
  28. {
  29.   set_flags( ifSELECTABLE, 0 );
  30.   set_events_mask( ~evCOMMAND, 0 );
  31.   align = _TALIGN_LEFT; color = _TATTR_NORMAL;
  32.   tx = NULL;
  33. }
  34.  
  35. Tdtext::~Tdtext( void )
  36. {
  37.   if( tx != NULL ) FREE( tx );
  38. }
  39.  
  40. void Tdtext::set_txt( char *t )
  41. {
  42.   if( tx != NULL ) FREE( tx );
  43.   tx = STRDUP( t );
  44.   redraw();
  45. }
  46.  
  47. //Tdtext protected:
  48.  
  49. void Tdtext::set_palette( void )
  50. {
  51.   Titem::set_palette();
  52.   switch( color )
  53.   {
  54.     case _TATTR_BOLD:
  55.       text_attr = bold_attr; return;
  56.     case _TATTR_SELECTED:
  57.       text_attr = selected_attr; return;
  58.     case _TATTR_DISABLED:
  59.       text_attr = disabled_attr;
  60.   }
  61. }
  62.  
  63. void Tdtext::draw( void )
  64. {
  65.   print( 1 );
  66. }
  67.  
  68. int Tdtext::print( boolean f )
  69. {
  70.   static char before[] = "|r. ";
  71.   static char after[] = "|r. |n";
  72.   char *s, *i, *j, *k, sk;
  73.   int l, lk, len, lines;
  74.  
  75.   if( tx == NULL )
  76.     s = "";
  77.   else
  78.     s = tx;
  79.   len = xl - 2;
  80.   k = s; lines = 0;
  81.   do
  82.   {
  83.     i = k; j = k - 1;
  84.     l = -1; lk = 0;
  85.     if( *k && ( *k != '\n' ) )
  86.     {
  87.       do
  88.       {
  89.         do
  90.         {
  91.           j++;
  92.           l++;
  93.         }
  94.         while( *j && ( *j != '\n' ) && ( *j != ' ' ) );
  95.         if( l <= len )
  96.         {
  97.           k = j;
  98.           lk = l;
  99.         }
  100.       }
  101.       while( *j && ( *j != '\n' ) && ( l <= len ) );
  102.       if( !lk )
  103.       {
  104.         k = i + len;
  105.         lk = len;
  106.       }
  107.     }
  108.     sk = *k; *k = 0;
  109.     before[2] = 1; after[2] = 1;
  110.     switch( align )
  111.     {
  112.       case _TALIGN_LEFT:
  113.         after[2] = (char) ( xl - lk - 1 ); break;
  114.       case _TALIGN_RIGHT:
  115.         before[2] = (char) ( xl - lk - 1 ); break;
  116.       case _TALIGN_CENTER:
  117.         before[2] = (char) ( ( ( len - lk + 1 ) >> 1 ) + 1 );
  118.         after[2] = (char) ( xl - lk - 1 );
  119.     }
  120.     if( f ) txt( before ), direct_txt( i ), txt( after );
  121.     *k = sk;
  122.     if( sk && ( ( sk == '\n' ) || ( sk == ' ' ) ) ) k++;
  123.     lines++;
  124.   }
  125.   while( sk || ( lines < yl ) );
  126.   return lines;
  127. }
  128.  
  129. //Tstext publics:
  130.  
  131. Tstext::Tstext( char *t, int _xl ):
  132.   Tdtext( _xl, 1 )
  133. {
  134.   set_txt( t );
  135.   resize( xl, print( 0 ) );
  136. }
  137.  
  138. //PREFIXES
  139.  
  140. static char talign_ = 0;
  141. static char tcolor_ = 0;
  142.  
  143. /*
  144.   Description:
  145.     Specify left alignement for text ( static or dynamic ) items. Call just
  146.     before constructing such items.
  147. */
  148. void _taleft( void )
  149. {
  150.   if( !talign_ ) talign_ = _TALIGN_LEFT;
  151. }
  152.  
  153. /*
  154.   Description:
  155.     Specify right alignement for text ( static or dynamic ) items. Call just
  156.     before constructing such items.
  157. */
  158. void _taright( void )
  159. {
  160.   if( !talign_ ) talign_ = _TALIGN_RIGHT;
  161. }
  162.  
  163. /*
  164.   Description:
  165.     Specify center alignement for text ( static or dynamic ) items. Call just
  166.     before constructing such items.
  167. */
  168. void _tacenter( void )
  169. {
  170.   if( !talign_ ) talign_ = _TALIGN_CENTER;
  171. }
  172.  
  173. char __talign( void )
  174. {
  175.   char result = _TALIGN_LEFT;
  176.  
  177.   if( talign_ ) result = talign_;
  178.   talign_ = 0;
  179.   return result;
  180. }
  181.  
  182. /*
  183.   Description:
  184.     Specify normal attribute for text ( static or dynamic ) item. Call just
  185.     before constructing such items.
  186. */
  187. void _tnormal( void )
  188. {
  189.   if( !tcolor_ ) tcolor_ = _TATTR_NORMAL;
  190. }
  191.  
  192. /*
  193.   Description:
  194.     Specify bold attribute for text ( static or dynamic ) item. Call just
  195.     before constructing such items.
  196. */
  197. void _tbold( void )
  198. {
  199.   if( !tcolor_ ) tcolor_ = _TATTR_BOLD;
  200. }
  201.  
  202. /*
  203.   Description:
  204.     Specify selected attribute for text ( static or dynamic ) item. Call just
  205.     before constructing such items.
  206. */
  207. void _tselected( void )
  208. {
  209.   if( !tcolor_ ) tcolor_ = _TATTR_SELECTED;
  210. }
  211.  
  212. /*
  213.   Description:
  214.     Specify disabled attribute for text ( static or dynamic ) item. Call just
  215.     before constructing such items.
  216. */
  217. void _tdisabled( void )
  218. {
  219.   if( !tcolor_ ) tcolor_ = _TATTR_DISABLED;
  220. }
  221.  
  222. char __tcolor( void )
  223. {
  224.   char result = _TATTR_NORMAL;
  225.  
  226.   if( tcolor_ ) result = tcolor_;
  227.   tcolor_ = 0;
  228.   return result;
  229. }
  230.  
  231. //CONSTRUCTORS FOR USE WITH DIALOG BOXES
  232.  
  233. /*
  234.   Description:
  235.     Construct dynamic text item and insert it in the dialog box.
  236.   Entry:
  237.     _xl, _yl: bounds of the text item.
  238.   Exit:
  239.     Return pointer to the text item.
  240. */
  241. Tdtext *dtext( int _xl, int _yl )
  242. {
  243.   Tdtext *t;
  244.  
  245.   t = NEW( Tdtext( _xl, _yl ) );
  246.   t->color = __tcolor();
  247.   t->align = __talign();
  248.   put_item( t, _xl + 1, _yl );
  249.   return t;
  250. }
  251.  
  252. /*
  253.   Description:
  254.     Construct static text item and insert it in the dialog box.
  255.   Entry:
  256.     txt - text to be displayed;
  257.     _xl - width of the text item.
  258.   Exit:
  259.     Return pointer to the text item.
  260. */
  261. Tstext *stext( char *txt, int _xl, ... )
  262. {
  263.   Tstext *t;
  264.   va_list argptr;
  265.  
  266.   va_start( argptr, _xl );
  267.   t = vstext( txt, _xl, argptr );
  268.   va_end( argptr );
  269.   return t;
  270. }
  271.  
  272. /*
  273.   Description:
  274.     Construct static text item and insert it in the dialog box.
  275.   Entry:
  276.     txt - text to be displayed;
  277.     _xl - width of the text item.
  278.   Exit:
  279.     Return pointer to the text item.
  280. */
  281. Tstext *vstext( char *txt, int _xl, va_list argptr )
  282. {
  283.   Tstext *t;
  284.   char buffer[512];
  285.  
  286.   vsprintf( buffer, txt, argptr );
  287.   t = NEW( Tstext( buffer, _xl ) );
  288.   t->color = __tcolor();
  289.   t->align = __talign();
  290.   put_item( t, _xl + 1, t->yl );
  291.   return t;
  292. }
  293.